import 'package:flutter/material.dart';
import 'package:english_words/english_words.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
    // This widget is the root of your application.
    @override
    Widget build(BuildContext context) {
        return new MaterialApp(
            title: 'Welcome to flutter',
            home: RandomWords(),
            theme: new ThemeData(),
        );
    }
}

class RandomWordsState extends State<RandomWords> {
    final _suggestions = <WordPair>[];
    final _saved = new Set<WordPair>();
    final _biggerFont = const TextStyle(fontSize: 18.0);

    @override
    Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
                title: Text('Startup Name Generator'),
                actions: <Widget>[
                    new IconButton(icon: const Icon(Icons.list), onPressed: _pushSaved)
                ],
            ),
            body: _buildSuggestions(),
        );
    }

    Widget _buildSuggestions() {
        return ListView.builder(
            padding: const EdgeInsets.all(16.0),
            itemBuilder: (context, i) {
                if (i.isOdd) return Divider();

                final index = i ~/ 2;

                if (index >= _suggestions.length) {
                    _suggestions.addAll(generateWordPairs().take(10));
                }

                return _buildRow(_suggestions[index]);
            });
    }

    Widget _buildRow(WordPair pair) {
        final bool alreadySaved = _saved.contains(pair);
        return ListTile(
            title: new Text(
                pair.asPascalCase,
                style: _biggerFont,
            ),
            trailing: new Icon(alreadySaved ? Icons.favorite : Icons.favorite_border,
                color: alreadySaved ? Colors.red : null),
            onTap: () {
                setState(() {
                    if (alreadySaved) {
                        _saved.remove(pair);
                    } else {
                        _saved.add(pair);
                    }
                });
            },
        );
    }

    void _pushSaved() {
        Navigator.of(context).push(
            new MaterialPageRoute<void>(
                builder: (BuildContext context) {
                    final Iterable<ListTile> tiles = _saved.map(
                            (WordPair pair) {
                            return new ListTile(
                                title: new Text(pair.asPascalCase, style: _biggerFont,),
                            );
                        }
                    );
                    final List<Widget> divided = ListTile
                        .divideTiles(tiles: tiles, context: context).toList();

                    return new Scaffold(
                        appBar: new AppBar(
                            title: const Text('Saved Suggestions'),
                        ),
                        body: new ListView(
                            children: divided,
                        ),
                    );
                }
            )
        );
    }
}

class RandomWords extends StatefulWidget {
    @override
    State<StatefulWidget> createState() {
        // TODO: implement createState
        return new RandomWordsState();
    }
}
